home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / grafik / bildanzeiger / seepix / source.lha / FileSelect.c < prev    next >
Text File  |  1992-11-27  |  7KB  |  201 lines

  1. /**FileSelect.c**********************************************************
  2.  *                                    *
  3.  *   SeePix -- by Hank Schafer                        *
  4.  *                                    *
  5.  *   SeePix is an IFF Picture Viewer.  It works with Lo-Res,        *
  6.  *   Med-Res, Hi-Res, HAM, and EHB formats.  I'm working on support     *
  7.  *   for X-Specs, and Anim5 formats.                    *
  8.  *                                    *
  9.  *   SeePix is based on a program by Olaf Barthel, called        *
  10.  *   'LoadImage'.  As released, LoadImage had a couple of bugs.     *
  11.  *   The Amiga-Key alternatives to menu use didn't all work.  That's    *
  12.  *   been fixed.  There were two separate print functions in LoadImage    *
  13.  *   which behaved exactly the same.  The redundancy was eliminated.    *
  14.  *   LoadImage used the Topaz ROMFONT, and made no allowances for a    *
  15.  *   different system default font (under 2.04).  I added a built-in    *
  16.  *   font.  I've reworked the code considerably from the original       *
  17.  *   release, to allow for optimizations based on time and space.    *
  18.  *                                    *
  19.  *   SeePix features a palette tool which allows "tweaking" of colors    *
  20.  *   prior to printing, allowing you to modify the color printout to    *
  21.  *   more closely resemble the original graphics (Blue is Blue, not    *
  22.  *   Purple).  SeePix can be Iconified.  SeePix features an ARP     *
  23.  *   interface.  SeePix now uses the PathMaster File Selector.        *
  24.  *                                    *
  25.  ************************************************************************
  26.  *                                                                      *
  27.  *   SeePix Copyright © 1992 by Hank Schafer; all rights reserved.      *
  28.  *                                                                      *
  29.  *   This program is free software; you can redistribute it and/or      *
  30.  *   modify it under the terms of the GNU General Public License as     *
  31.  *   published by the Free Software Foundation, either version 1, or    *
  32.  *   (at your option) any later version.                                *
  33.  *                                                                      *
  34.  *   This program is distributed in the hope that it will be useful,    *
  35.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of     *
  36.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *
  37.  *   General Public License for more details.                           *
  38.  *                                                                      *
  39.  *   You should have received a copy of the GNU General Public License  *
  40.  *   along with this program; if not, write to:                         *
  41.  *                 Free Software Foundation, Inc.                       *
  42.  *                 675 Massachusetts Ave.                               *
  43.  *                 Cambridge  MA  02139, USA                            *
  44.  *                                                                      *
  45.  **************** Special Function Copyright Notices ********************
  46.  *                                    *
  47.  ****LoadImage Copyright Notice:                    *
  48.  *                                    *
  49.  *   LoadImage is © Copyright 1988, 1989, 1990 by MXM, all rights    *
  50.  *   reserved, written by Olaf Barthel.  No guarantees of any kind are    *
  51.  *   made that this program is 100% reliable.  Use this program on    *
  52.  *   your own risk!                            *
  53.  *                                    *
  54.  ****Iconify Copyright Notice:                        *
  55.  *                                    *
  56.  *   Copyright 1987 by Leo L. Schwab.                    *
  57.  *   Permission is hereby granted for use in any and all programs,    *
  58.  *   both Public Domain and commercial in nature, provided this     *
  59.  *   Copyright notice is left intact.                    *
  60.  *                                    *
  61.  ****ColorWindow (Palette) Copyright Notice:                *
  62.  *                                    *
  63.  * ColorWindow Routine    --  Color Window Routines            *
  64.  *     from Book 1 of the Amiga Programmers' Suite by RJ Mical          *
  65.  *                                    *
  66.  * Copyright (C) 1986, 1987, Robert J. Mical                *
  67.  * All Rights Reserved.                         *
  68.  *                                    *
  69.  ****PathMaster Copyright Notice:                    *
  70.  *                                    *
  71.  * -------------------------------------------------------------------- *
  72.  *   Copyright © 1989 Justin V. McCormick.  All Rights Reserved.    *
  73.  * -------------------------------------------------------------------- *
  74.  *                                    *
  75.  *    The PathMaster name is a trademark of Justin V. McCormick.    *
  76.  *                                    *
  77.  *   PathMaster File Selector source and documentation written by:    *
  78.  *                                    *
  79.  *             Justin V. McCormick.                *
  80.  *           Copyright © 1989 by Justin V. McCormick.         *
  81.  *             All Rights Reserved.                *
  82.  *                                    *
  83.  * -------------------------------------------------------------------- *
  84.  ************************************************************************
  85.  *                                    *
  86.  *   Hope this is something you can use and enjoy.            *
  87.  *                                    *
  88.  ************************************************************************/
  89.  
  90. #ifdef    PATHMASTER
  91.  
  92. /*
  93.  * FileSelect
  94.  */
  95.  
  96. LONG
  97. FileSelect(fsrequest)
  98.     struct FSRequest *fsrequest;
  99. {
  100.     LONG        i, status, newpat;
  101.     ULONG        signals;
  102.  
  103.     /* (Re)Initialize things */
  104.  
  105.     FSReq = fsrequest;        /* Init global filereq struct pointer */
  106.  
  107.     /* Set pattern to match files */
  108.  
  109.     newpat = 0;            /* Assume no pattern changes at first */
  110.     FSPatternInfo.Buffer = (UBYTE *) fsrequest->matchpattern;
  111.     FSPatternInfo.BufferPos = strlen(FSPatternInfo.Buffer);
  112.     if (FSPatternInfo.Buffer[0] == 0)    /* Put splat back if no matchpattern  */
  113.     (VOID) strcpy(FSPatternInfo.Buffer, SplatStr);
  114.  
  115.     if (lstrcmp(FSPatternUndoBuffer, FSPatternInfo.Buffer) != 0) {
  116.     safestrcpy(FSPatternUndoBuffer, FSPatternInfo.Buffer, (LONG) (MATCHSTRSIZE - 1));
  117.     newpat = 1;
  118.     }
  119.     /* Set pattern to ignore files */
  120.  
  121.     if (lstrcmp(FSIgnorePat, fsrequest->ignorepattern) != 0) {
  122.     safestrcpy(FSIgnorePat, fsrequest->ignorepattern, (LONG) (FILESTRSIZE - 1));
  123.     newpat = 1;
  124.     }
  125.     /* Update fsflags if FSReq->flags has changed, reset state if needed */
  126.  
  127.     if (FSCheckFlagChange() != 0)
  128.     newpat = 1;
  129.  
  130.     /* Set initial directory */
  131.  
  132.     FSPathInfo.Buffer = (UBYTE *) fsrequest->dirname;
  133.     FSPathInfo.BufferPos = strlen(FSPathInfo.Buffer);
  134.     if (lstrcmp(FSPathInfo.Buffer, FSPathBuf) != 0) {
  135.     fsvirgindir = 1;
  136.     }
  137.     /* Set initial filename */
  138.  
  139.     FSFileInfo.Buffer = (UBYTE *) fsrequest->filename;
  140.     FSFileInfo.BufferPos = strlen(FSFileInfo.Buffer);
  141.  
  142.     /* Open and initialize everything, start IDCMP processing */
  143.  
  144.     status = InitFSWindow();
  145.     if (status != 0) {
  146.     FSWinTitle();
  147.  
  148.     /* Redisplay buffered data if still valid */
  149.  
  150.     if (FSTestOldLock() != 0 && fsvirgindir <= 0) {
  151.         if (newpat != 0) {    /* Pattern changed, but still have old data */
  152.         FSMatchPattern();
  153.         } else {
  154.  
  155.         /* Otherwise just redraw them from static data */
  156.  
  157.         FSSetFileGads();
  158.         FSDisableAllFGads();
  159.         }
  160.     }
  161.     FSDone = 0;
  162.     while (FSDone == 0) {
  163.         if (fsvirgindir != 0) {
  164.         if (FSGrabEntry() == 0)
  165.             goto FSFailed;
  166.         signals = FSSignal | FSUserSignal;
  167.         } else {
  168.         signals = Wait((LONG) FSSignalMask);
  169.         }
  170.  
  171.         if ((signals & FSUserSignal) != 0) {
  172.         i = (FSReq->userfunc) (FSReq, FSWin);
  173.         if (i != 0)
  174.             fsvirgindir = 1;
  175.         }
  176.         if ((signals & FSSignal) != 0)
  177.         CheckFSIDCMP();
  178.     }
  179.     }
  180.   FSFailed:
  181.  
  182.     if (FSRPort != 0) {
  183.     FreeMem(FSRPort, (LONG) sizeof(struct RastPort));
  184.     FSRPort = 0;
  185.     }
  186.     if (MainFont != 0) {
  187.     CloseFont(MainFont);
  188.     MainFont = 0;
  189.     }
  190.     if (FSWin != 0) {
  191.     FSReq->leftedge = FSWin->LeftEdge;
  192.     FSReq->topedge = FSWin->TopEdge;
  193.     CloseWindow(FSWin);
  194.     FSWin = 0;
  195.     }
  196.     FreeFSVBDelay();
  197.     return (status);
  198. }
  199.  
  200. #endif    /* PATHMASTER */
  201.